﻿CREATE PROCEDURE [dbo].[ReservasObtenerPorSalaPorDia]
@Fecha DATETIME,@id_sala int
AS
BEGIN
--
--DECLARE @FECHA1 DATETIME
--set @FECHA1 = (select CONVERT(datetime ,'13/03/2011',103))
--
DECLARE @RESERVAS_AUX Table (id_reserva	bigint,
							 id_grupo bigint,
							 id_sala int,
							 horario_entrada smalldatetime,
							 horario_salida smalldatetime)

INSERT INTO @RESERVAS_AUX (id_reserva,id_grupo,id_sala,horario_entrada,horario_salida)
(SELECT id_reserva,id_grupo,id_sala,horario_entrada,horario_salida FROM Reservas
WHERE DATEPART(year,horario_entrada) = DATEPART(year,@Fecha)
AND DATEPART(month,horario_entrada) = DATEPART(month,@Fecha)
AND DATEPART(day,horario_entrada) = DATEPART(day,@Fecha)
AND id_sala = @id_sala)

DECLARE @hora int
DECLARE @table Table (hora int,grupo bigint)
set @hora = 0
WHILE @hora < 24
BEGIN
	INSERT INTO @table (hora) VALUES (@hora)
	IF(SELECT COUNT(1) FROM @RESERVAS_AUX WHERE @hora BETWEEN DATEPART(hour,horario_entrada) AND DATEPART(hour,horario_salida)) > 0
	BEGIN
		UPDATE @table SET grupo = 
			(SELECT id_grupo FROM @RESERVAS_AUX 
			WHERE @hora >= DATEPART(hour,horario_entrada) AND @hora < DATEPART(hour,horario_salida)) 
		WHERE hora = @hora
	END
	set @hora = @hora + 1
END

SELECT R.hora AS hora, S.nombre_grupo AS grupo FROM @table R
LEFT JOIN Grupos S ON R.grupo = S.id_grupo

END